import os
import sys

# 判断是否是打包后的环境
if getattr(sys, 'frozen', False):
    # 使用可执行文件所在目录作为项目根目录，避免受当前工作目录影响
    PROJECT_ROOT = os.path.dirname(os.path.abspath(sys.executable))
else:
    # settings.py 位于 src/config/ 下，这里将 PROJECT_ROOT 指向仓库根目录
    PROJECT_ROOT = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..'))
DATA_DIR = os.path.join(PROJECT_ROOT, 'data')
DATA_DIR = os.path.normpath(DATA_DIR)

if not os.path.exists(DATA_DIR):
    os.makedirs(DATA_DIR)

DEFAULT_STRUCTURE_SPEC = os.path.join(DATA_DIR, '数据库配置表.xlsx')
DEFAULT_SOURCE_DATA = os.path.join(DATA_DIR, '源数据数据集.xlsx')
DEFAULT_SOURCE_DATA_TREATED = os.path.join(DATA_DIR, '源数据数据集_处理后.xlsx')

EXCEL_CONFIG = {
    'max_rows': 1048576,
    'max_cols': 16384,
    'default_sheet': 'Sheet1',
    'encoding': 'utf-8',
    'date_format': '%Y-%m-%d',
    'datetime_format': '%Y-%m-%d %H:%M:%S'
}

VALIDATION_RULES = {
    'required_fields': [],
    'unique_fields': [],
    'data_types': {},
    'value_ranges': {},
    'date_formats': []
}

TRANSFORM_CONFIG = {
    'batch_size': 1000,
    'chunk_size': 10000,
    'max_memory_usage': '1GB',
    'enable_multiprocessing': True,
    'max_workers': 4
}

LOG_CONFIG = {
    'level': 'INFO',
    'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    'file_prefix': 'excel_transformer',
    'max_file_size': '10MB',
    'backup_count': 5
}

ERROR_HANDLING = {
    'skip_invalid_rows': True,
    'log_errors': True,
    'save_error_report': True,
    'error_report_format': 'xlsx'
}

OUTPUT_CONFIG = {
    'format': 'xlsx',
    'compression': True,
    'add_timestamp': True,
    'split_by_size': False,
    'max_file_size': '50MB'
}

def get_env_variable(var_name, default_value=None):
    return os.getenv(var_name, default_value)

def ensure_directories():
    for directory in [DATA_DIR]:
        if not os.path.exists(directory):
            os.makedirs(directory)

OUTPUT_FILE = os.path.join(DATA_DIR, 'output_data.xlsx')
ERROR_REPORT_FILE = os.path.join(DATA_DIR, 'error_report.xlsx')